from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.pool import NullPool
import pandas as pd
import pandas_bokeh
pd.set_option('plotting.backend', 'pandas_bokeh')
class DbHandler(object):
    def __init__(self, name='lhjy'):
        con_url = 'mysql+pymysql://root:alpine@localhost:3306/' + name
        self.db_addr = con_url

    def create_session(self):
        # 初始化数据库连接:
        # engine = create_engine(con_url, pool_size=100, pool_recycle=3600)
        self.engine = create_engine(self.db_addr, poolclass=NullPool)
        self.session = scoped_session(sessionmaker(bind=self.engine))

    def close_session(self):
        self.session.close()
db = DbHandler()
db.create_session()
data = pd.read_sql_table("jsl_bonds_alive", db.engine)
p_scatter = data.plot_bokeh.scatter(
    figsize=(800, 800),
    x="price",
    y="premium_rt",
    # size="curr_iss_amt",# 大小
    hovertool_string="@bond_nm",
    category="sw_nm_r",  # 作为分类的字段列
    title="kkj")
#
# kind: 绘制哪种图形，目前支持的有 “line”, “point”, “scatter”, “bar” 和 “histogram”。在不久的将来，更多的将被实现为水平条形图、箱线图、饼图等。
# x: 用于水平 x 轴的列的名称。如果未指定 x 参数，则索引用于绘图的 x 值。或者，也可以传递与数据帧具有相同元素数的值数组。
# y: 用于垂直 y 轴的列名称或列名称列表。
# figsize: 选择绘图的宽度和高度，是一个元组。
# title: 设置绘图的标题。
# xlim/ylim: 为 x 轴和 y 轴设置绘图的可视范围（也适用于日期时间 x 轴）。
# xlabel/ylabel: 设置 x 和 y 标签
# logx/logy: 在 x/y 轴上设置对数刻度。
# xticks/yticks: 显式设置轴上的刻度
# color: 定义打印的单一颜色。
# colormap: 可用于指定要打印的多种颜色。可以是颜色列表，也可以是 Bokeh 调色板的名称，Bokeh color palette。
# hovertool: 如果为 True，则悬停工具处于活动状态，如果为 False，则不会绘制悬停工具。
# hovertool_string: 如果指定，此字符串将用于 hovertool（@{column} 将替换为鼠标悬停的元素的列值，另请参见 Bokeh文档 和 此处）
# toolbar_location: 指定工具栏位置的位置(None, “above”, “below”, “left” 或者 “right”)，默认值: “right”
# zooming: 启用/禁用缩放。默认值：True
# panning: 启用/禁用平移。默认值：True
# fontsize_label/fontsize_ticks/fontsize_title/fontsize_legend: 设置标签、记号、标题或图例的字体大小（格式为“15pt”的整数或字符串）
# rangetool：启用范围工具滚动条。默认 False。
# kwargs**: 可选关键字参数，参见：bokeh.plotting.figure.line